<?php

/**
 * UsuarioLogic
 * @package model
 * @subpackage logic
 * 
 */
class UsuarioLogic extends LogicModel {

    public function __construct() {
        parent::__construct(new UsuarioDAO());
    }

    /**
     * Lista de usuarios do sistema 
     */
    public function listaDeUsuariosDoSistema($and = null, $objectCollection = null) {

        $objMunicipioLogic = new MunicipioLogic();

        $and = ($and !== null) ? " AND {$and}" : "";
        $where = "ide_usuario IN (
                    SELECT ide_usuario 
                        FROM seguranca.usuario__perfil 
                            WHERE ide_perfil IN (
                                SELECT ide_perfil 
                                    FROM seguranca.perfil 
                                        WHERE ide_sistema = " . OID_SIS . "
                            )
                        ) AND ide_colaborador IN (
                                    SELECT ide_colaborador 
                                        FROM pessoal.controle
                                            WHERE ide_sistema = " . OID_SIS . "
                                )" . $and;


        $exception = array();
        $exception['select']['perfil'] = "ide_perfil IN (select ide_perfil from seguranca.perfil where ide_sistema = " . OID_SIS . ")";
        $listaUsuarios = $this->listar($where, null, $objectCollection, $exception);

        if (is_array($listaUsuarios)) {

            foreach ($listaUsuarios as $objUsurio) {

                if (is_array($objUsurio->getPerfil())) {
                    $objPerfil = $objUsurio->getPerfil();
                    $objUsurio->setPerfil($objPerfil[0]);
                }

                $objUsurio->getColaborador()->setMunicipio(
                        $objMunicipioLogic->obterPorId(
                                $objUsurio->getColaborador()->getMunicipio()
                        )
                );

                $arrayObjUsuario[] = $objUsurio;
            }

            $listaUsuarios = $arrayObjUsuario;
            unset($arrayObjUsuario);
        }

        return $listaUsuarios;
    }

    public function obterUsuarioPorCPFeSenha($cpf, $senha) {
        $objUsuario = $this->DAO->obterUsuarioPorCPFeSenha(FormatHelper::unformatCPF($cpf), md5($senha));
        return $objUsuario;
    }

    public function obterUsuarioSistemaPorId($id) {
        
        # Logic
        $objColaboradorLogic = new ColaboradorLogic();
        
        # Obeter Usuario
        $exception = array();
        $exception['select']['perfil'] = "ide_perfil IN (select ide_perfil from seguranca.perfil where ide_sistema = " . OID_SIS . ")";
        $objUsuario = $this->obterPorId($id, true, $exception);
        unset($exception);

        if (is_object($objUsuario)) {
            
            $exception = array();
            $exception['select']['Controle'] = "ide_sistema = " . OID_SIS;
            $objColaborador = $objColaboradorLogic->obterPorId($objUsuario->getColaborador()->getId(), true, $exception);
            unset($exception);

            if (is_object($objColaborador)) {

                $objControle = $objColaborador->getControle();
                if (is_array($objControle)) {
                    $objColaborador->setControle($objControle[0]);
                }

                $objUsuario->setColaborador($objColaborador);
                unset($objControle);
            }

            if (is_array($objUsuario->getPerfil())) {
                $objPerfil = $objUsuario->getPerfil();
                $objUsuario->setPerfil($objPerfil[0]);
                unset($objPerfil);
            }

        }

        return $objUsuario;
    }

}

?>